// utils/request.js接口方法----导出axios
// 导入 axios 请求

import axios from '../utils/request'
// import { getToken } from '../utils/token'

// 接口方法, 只负责调用一个接口, 返回一个Promise对象
export const allChannelListAPI = () => {
  return axios({
    url: '/v1_0/channels'
  })
}

/**
 * 登录接口
 * @param {*} param0 数据对象
 * @returns Promise对象
 */
export const loginAPI = ({ mobile, code }) => axios({
  url: '/v1_0/authorizations',
  method: 'POST',
  data: {
    mobile,
    code
  }
})

/**
 * 获取所有频道
 * @returns Promise对象
 */
export const getChannelListAPI = () => axios({
  url: '/v1_0/channels'
  // method: 'GET',
  // params: {},
  // data: {},
  // headers: {}
})

/**
 * 获取已选频道
 * @returns Promise对象
 * 注意：不强制要求用户登录，匿名用户有默认的频道列表
 */
export const getUserChannelListAPI = () => {
  // console.log(12)
  return axios({
    url: '/v1_0/user/channels'
    // headers: {
    //   Authorization: `Bearer ${getToken()}`
    // }
  })
}

/**
 * 重置频道（覆盖式保存）
 * @returns Promise对象
 * RestFul API规范（地址相同，请求方式不同，动作和功能不同）
 */
export const resetUserChannelAPI = (channelArr) => {
  return axios({
    url: '/v1_0/user/channels',
    method: 'PUT',
    data: {
      channels: channelArr
      // 需要传channels 数组对象 [{id:'',seq:''}] 发给后台
    }
  })
}

/**
 * 删除指定用户频道
 * @returns Promise对象 target :路径参数 用户频道id
 * RestFul API规范（地址相同，请求方式不同，动作和功能不同）
 */
export const deleteUserChannelAPI = (channelId) => {
  return axios({
    url: `/v1_0/user/channels/${channelId}`,
    method: 'DELETE',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded' // 看文档，固定值
    },
    data: 'a=111&b=222' // 查询字符串
  })
}

// 省略了大括号和 return
// export const getChannelListAPI = () => axios({url:'/v1_0/channels'})

/**
 * 文章 - 获取列表 ---获取文章新闻推荐
 * @param {*} channel_id 频道 id, 上一个页面的时间戳 timestamp
 * @returns Promise对象
 */
export const getArticlesListAPI = ({ channel_id, timestamp = new Date() }) => axios({
  url: '/v1_0/articles',
  // headers: {
  //   Authorization: `Bearer ${getToken()}`
  // },
  params: {
    channel_id,
    timestamp
    // 时间戳
  }
})

// 该不该传参：函数内自己能确定的
// 函数调用一万次，这个值都是固定的，就写死固定值在里面
// 函数调用 几次，这个值会变，必须要留好参数，让调用者决定

/**
 * 点击不喜欢 反馈-传artId 过来
 * @returns
 */
export const dislikeArticleAPI = (artId) => {
  return axios({
    url: '/v1_0/article/dislikes',
    method: 'POST',
    // headers: {
    //   Authorization: `Bearer ${getToken()}`
    // },
    data: {
      target: artId
    }
  })
}

/**
 * 点击二级反馈-反馈文章-举报
 * @param {artId,type} artId 传入举报文章id
 * @returns 对象
 */
export const reportArticleAPI = ({ artId, type }) => {
  return axios({
    url: '/v1_0/article/reports',
    method: 'POST',
    // headers: {
    //   Authorization: `Bearer ${getToken()}`
    // },
    data: {
      target: artId,
      type: type,
      remark: '就是其他问题' // 其他做法：用户点其他问题：可以收集用户输入的内容
    }
  })
}

/** 搜索-联想列表
 *  获取联想建议（自动补全）
 * @returns
 */
export const suggestListAPI = (keyword) => {
  return axios({
    url: '/v1_0/suggestion',
    params: {
      q: keyword // 请求的关键词句，发送请求时携带请求参数-Keyword
    }
  })
}

// 搜索 - 结果列表- 文章列表项
/**
 * 搜索结果页面
 * @param {q,page} q 搜索关键词；page 页数，不传默认为1；per_page 每页数量，不传默认10
 * @returns 对象
 */
export const searchResultListAPI = ({ keywords, page = 1, per_page = 10 }) => {
  return axios({
    url: '/v1_0/search',
    params: {
      q: keywords,
      page,
      per_page
    }
  })
}

// 文章 - 详情
/**
 * 获取新闻详情
 * @param {*} param0 /v1_0/articles/:article_id
 * @returns
 */
export const getArticleDetailAPI = ({ artId }) => {
  return axios({
    // :artId是后台规定的参数名
    // 前端要在对应路径位置传值(不要写:)
    url: `/v1_0/articles/${artId}`
  })
}

/**
 * 文章详情页---点击--‘关注’用户
 * @param {target} 关注用户的id
 * @returns 注意：一个参数，请求参数不是对象了{}
 */
export const followedAutAPI = (autId) => {
  return axios({
    url: '/v1_0/user/followings',
    method: 'POST',
    data: {
      target: autId
    }
  })
}

/**
 * 文章详情页---点击--‘取消关注用户’
 * @param {target}  /v1_0/user/followings/:target
 * @returns
 */
export const unFollowedAutAPI = (aut_id) => {
  return axios({
    url: `/v1_0/user/followings/${aut_id}`,
    method: 'DELETE'
  })
}

// 文章 - 点赞
/**
 * 对文章点赞
 * @param {target} 点赞的文章id
 * @returns
 */
export const articleLikeAPI = (artId) => {
  return axios({
    url: '/v1_0/article/likings',
    method: 'POST',
    data: {
      target: artId
    }
  })
}

// 文章 - 取消点赞
/**
 * 取消对文章点赞
 * @param {路径参数文章id} /v1_0/article/likings/:target
 * @returns
 */
export const articleDisLikeAPI = ({ artId }) => {
  return axios({
    url: `/v1_0/article/likings/${artId}`,
    method: 'DELETE'
  })
}

/**
 * 获取评论或评论回复
 * @returns type : 评论类型，a-对文章(article)的评论，c-对评论(comment)的回复
 * source : 源id，文章id或评论id
 * offset : 获取评论数据的偏移量，值为评论id，表示从此id的数据向后取，不传表示从第一页开始读取数据
 * limit : 获取的评论数据个数，不传表示采用后端服务设定的默认每页数据量
 *  offset第一页时, 不用在params携带(axios发现值为null会自动忽略此参数)
 */
export const getCommentsListAPI = ({ artId, offset = null, limit = 0 }) => {
  return axios({
    url: '/v1_0/comments',
    params: {
      type: 'a',
      source: artId,
      offset: offset, // axios 遇到值为null 时，会忽略当前的参数Key和值null
      limit: limit
    }
  })
}

/**
 * 评论-点赞
 * @param {*} param0
 * @returns
 */
export const likeCommentAPI = (commentId) => {
  return axios({
    url: '/v1_0/comment/likings',
    method: 'POST',
    data: {
      target: commentId
    }
  })
}
// 评论-取消点赞
export const unlikeCommentAPI = (commentId) => {
  return axios({
    url: `/v1_0/comment/likings/${commentId}`,
    method: 'DELETE'
  })
}
// 评论-发布评论
/**
 * target : 评论的目标id（评论文章即为文章id，对评论进行回复则为评论id）
 * content : 评论内容
 * art_id : 文章id，对评论内容发表回复时，需要传递此参数，表明所属文章id。对文章进行评论，不要传此参数。
 * @param {*} param0
 * @returns
 */
export const sentCommentAPI = ({ target, content, artId = null }) => {
  const obj = {
    target: target, // 文章ID/评论ID
    content: content
  }
  if (artId != null) {
    // 回复-评论-发布对评论的评论--target是评论ID，需要外面传artId，就需要第三个参数，添加文章ID字段和值
    // 回复-文章-发布文章评论---不需要第三个参数
    obj.art_id = artId
  }
  return axios({
    url: '/v1_0/comments',
    method: 'POST',
    data: obj // axios会忽略params参数值为null的情况，data方式请求体传递null,axios是不会忽略这对参数的
  })
}

// 用户 - 基本资料
export const userInfoAPI = () => {
  return axios({
    url: '/v1_0/user'
  })
}
// 用户- 个人资料(就为了获取生日)
export const userProfileAPI = () => {
  return axios({
    url: '/v1_0/user/profile'
  })
}
// 用户- 更新头像
// 注意: formObj的值必须是一个表单对象
// '{"a": 10, "b": 20}' // 对象格式的JSON字符串
// new FormData() // 表单对象
export const updatePhotoAPI = (formObj) => {
  return axios({
    url: '/v1_0/user/photo',
    method: 'PATCH', // 局部更新
    data: formObj
    // 如果你的请求体内容是表单对象, 浏览器会自动携带请求头Content-Type为multipart/form-data
  })
}
